package com.fabiodocarmo.calendario.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Restrictions;



import com.fabiodocarmo.calendario.beans.DetalheNaoRepetivel;
import com.fabiodocarmo.calendario.beans.DetalheNaoRepetivelPk;
import com.fabiodocarmo.calendario.dao.util.DataAccessLayerException;
import com.fabiodocarmo.calendario.dao.util.HibernateFactory;

public class DetalheNaoRepetivelDao extends AbstractDao<DetalheNaoRepetivel> implements Dao<DetalheNaoRepetivel>{

	public DetalheNaoRepetivelDao() throws DataAccessLayerException {
		super();
	}

	public DetalheNaoRepetivel buscar(int dia, int mes, int ano) throws DataAccessLayerException {
		DetalheNaoRepetivel detalheNaoRepetivel = null;
        try {
            startOperation();
            Criteria criteria = session.createCriteria(DetalheNaoRepetivel.class);
            if (dia > 0 && dia < 32 && mes >= 0 && mes <= 11 && ano > 0) {
                criteria.add(Restrictions.eq("pk", new DetalheNaoRepetivelPk(dia, mes, ano)));
            }
            detalheNaoRepetivel = (DetalheNaoRepetivel)criteria.uniqueResult();
            tx.commit();
        } catch (HibernateException e) {
            handleException(e);
        } finally {
            HibernateFactory.close(session);
        }
		return detalheNaoRepetivel;
	}

    /**
     * Cria um novo Detalhe Não Repetível no Banco de Dados
     * @param event
     */
    @Override
    public void create(DetalheNaoRepetivel detalheNaoRepetivel) throws DataAccessLayerException {
        super.saveOrUpdate(detalheNaoRepetivel);
    }


    /**
     * Atualiza o estado do Detalhe Não Repetível no Banco de Dados.
     *
     * @param event
     */
    @Override
    public void update(DetalheNaoRepetivel detalheNaoRepetivel) throws DataAccessLayerException {
        super.saveOrUpdate(detalheNaoRepetivel);
    }

	@Override
	public void delete(Integer id) throws DataAccessLayerException {

		throw new UnsupportedOperationException();

	}

	@Override
	public void delete(DetalheNaoRepetivel serial) throws DataAccessLayerException {

		throw new UnsupportedOperationException();

	}

	@Override
	public DetalheNaoRepetivel find(Integer id) throws DataAccessLayerException {

		throw new UnsupportedOperationException();

	}

	@Override
	public List<DetalheNaoRepetivel> findAll() throws DataAccessLayerException {

		throw new UnsupportedOperationException();

	}


}
